/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package issr.boundary;

import com.vaadin.data.Item;
import com.vaadin.terminal.Sizeable;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Select;
import com.vaadin.ui.Table;
import com.vaadin.ui.VerticalLayout;
import issr.boundary.vaadin.AbstractView;
import issr.boundary.vaadin.MainApplication;
import issr.controller.ControlloreAssegnazioneDipendente;
import issr.entity.Puntovendita;
import issr.entity.Utente;
import issr.misc.Labels;
import java.util.ArrayList;

/**
 *
 * @author Soulreaver
 */
public class PannelloAssegnazioneDipendente extends AbstractView implements Button.ClickListener {

    private ControlloreAssegnazioneDipendente controllore;
    private final VerticalLayout layout;
    private final Table textTable;
    private final Select puntoVenditaSelect;
    private Button submit;

    public PannelloAssegnazioneDipendente() {
        controllore = new ControlloreAssegnazioneDipendente();
        layout = new VerticalLayout();
        textTable = new Table();
        textTable.addContainerProperty(Labels.UTENTE, Utente.class, null);
        textTable.addContainerProperty(Labels.NOME, String.class, null);
        textTable.addContainerProperty(Labels.COGNOME, String.class, null);
        textTable.addContainerProperty(Labels.RUOLO, String.class, null);
        textTable.addContainerProperty(Labels.PUNTO_VENDITA, String.class, null);

        puntoVenditaSelect = new Select("Punto Vendita");
        puntoVenditaSelect.setImmediate(true);

        // Create the visual components of the view.
        setSizeFull();
        setCompositionRoot(layout);
        layout.setHeight("100%");
        layout.setWidth("100%");
        layout.setSpacing(true);
        layout.setMargin(true);

        submit = new Button("Assegna", this);

        layout.addComponent(textTable);

        HorizontalLayout hlayout = new HorizontalLayout();
        hlayout.setHeight("150");
        hlayout.setWidth("100%");
        hlayout.setSpacing(true);
        hlayout.setMargin(true);
        hlayout.addComponent(puntoVenditaSelect);
        puntoVenditaSelect.setWidth(100, Sizeable.UNITS_PERCENTAGE);
        hlayout.addComponent(submit);
        layout.addComponent(hlayout);
    }

    private void visualizzaForm() {
        ArrayList<Puntovendita> listaPuntiVendita = controllore.ottieniListaPuntiVendita();
        for (int i = 0; i < listaPuntiVendita.size(); i++) {
            puntoVenditaSelect.addItem(listaPuntiVendita.get(i));
        }
        ArrayList<Utente> dipendenti = controllore.ottieniListaDipendenti();

        // For each line in the log, add a container item.
        for (int dummyId = 0; dummyId < dipendenti.size(); dummyId++) {
            Item item = textTable.addItem(dummyId);
            item.getItemProperty(Labels.UTENTE).setValue(dipendenti.get(dummyId));
            item.getItemProperty(Labels.NOME).setValue(dipendenti.get(dummyId).getNome());
            item.getItemProperty(Labels.COGNOME).setValue(dipendenti.get(dummyId).getCognome());
            item.getItemProperty(Labels.RUOLO).setValue(dipendenti.get(dummyId).getRuolo().getNome());
            if (dipendenti.get(dummyId).getPuntovendita() != null) {
                item.getItemProperty(Labels.PUNTO_VENDITA).setValue(dipendenti.get(dummyId).getPuntovendita().getNome());
            }
        }
        textTable.setVisibleColumns(new Object[]{Labels.NOME, Labels.COGNOME, Labels.RUOLO, Labels.PUNTO_VENDITA});
        textTable.setWidth(100, Sizeable.UNITS_PERCENTAGE);
        textTable.setHeight(100, Sizeable.UNITS_PERCENTAGE);
        textTable.setPageLength(0);
        textTable.setImmediate(true);
        textTable.setSelectable(true);
    }

    @Override
    protected void close() throws Exception {
    }

    @Override
    protected void open() throws Exception {
        puntoVenditaSelect.removeAllItems();
        textTable.removeAllItems();
        visualizzaForm();
    }

    @Override
    public void buttonClick(ClickEvent event) {
        Object rowId = textTable.getValue();
        if (rowId != null) {
            if (controllore.assegnaDipendente(
                    (Utente) textTable.getContainerProperty(rowId, Labels.UTENTE).getValue(),
                    (Utente) MainApplication.getProject().getUser(),
                    (Puntovendita) puntoVenditaSelect.getValue()) == true) {
                MainApplication.getProject().getMainWindow().showNotification("Modifica assegnazione dipendente effettuata con successo");
            } else {
                MainApplication.getProject().getMainWindow().showNotification("Errore assegnazione");
            }
        }
    }
}
